---
Title: GNU social Summer of Code 2019
Url: /social/soc/2019
---
<style>
video {
    width: 100%;
    height: auto;
    border: 0;
    border-radius: 4px;
}
.BigButton {
    -moz-transition: color .2s ease-in-out;
    -ms-transition: color .2s ease-in-out;
    -webkit-text-decoration-skip: objects;
    -webkit-transition: color .2s ease-in-out;
    border-bottom: dotted 1px rgba(255, 255, 255, .35);
    color: #;
    outline: 0!important;
    text-decoration: none !important;
    transition: background-color 100ms linear, color 100ms linear, border 100ms linear;
    -webkit-box-shadow: 0 2px 6px rgba(100, 8, 50, .3);
    -webkit-transition: background .2s;
    border-radius: 3px;
    box-shadow: 0 2px 6px rgba(100, 8, 50, .3);
    float: right;
    margin-bottom: 1.2em;
    transition: background .2s;
    padding: .8rem 3.2rem;
    background: #bd1f74;
    color: #fff;
}
.BigButton:hover {
    box-shadow: inset 0 0 0 1px #ce1b28;
    color: #fff;
}
.BigButton:visited {
    color: #fff;
}
#editions-menu ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333333;
}
#editions-menu ul li {
  float: left;
}
#editions-menu ul li a {
  display: block;
  color: white;
  text-align: center;
  padding: 16px;
  text-decoration: none;
}
#editions-menu ul li a:hover {
  background-color: #111111;
}
</style>
[GNU social](/social) - [Summer of Code](/social/soc/) is [organized by **Diogo Cordeiro**](https://go.diogo.site/gs-gsoc).

Mentors: [Daniel Supernault](https://github.com/dansup), [Diogo Cordeiro](https://www.diogo.site/) and [Mikael Nordfeldth](https://mmn-o.se/)

**EDITIONS**
<nav id="editions-menu">

* **[2019](#)**
* [2018](https://www.diogo.site/projects/GS-ActivityPub-plugin)

</nav>

## Ready?

<video width="720" controls class="image" style="margin-left: auto; margin-right: auto; display: block" poster="/images/video-poster-gs-on-gsoc.png">
  <source src="/videos/gs-on-gsoc.webm" type="video/webm">
</video>
<br>

GNU social is a social communication software used in <a href="https://blog.diogo.site/posts/what-is-the-fediverse">federated social networks</a>. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself.

### What would be expected from me?

Reliability Engineering
: Fix bugs of current code base and ensure it stays functional

Software Engineering
: Further development of GNU social v2

Computer Security Engineering
: Ensure GS is secure

Every student will have to pick tasks in each of these fields in GS's GSoC. Excited already? Then read below some of our ideas and learn how you can be part of this!

## Ideas

### Make the ActivityPub plugin started in previous GSoC reliable

In previous GSoC an ActivityPub plugin for GS was developed but isn't compatible with every piece of software used in the fediverse (only working with Mastodon so far) nor completely safe and robust for large usage.
Some of the existing key problems are:

* It is unable to de-duplicate when OStatus and ActivityPub are both enabled - mostly noticed between GS instances with both enabled;
* Is unable to verify signatures which is an attack vector that makes the plugin unsafe for use right now;
* It also doesn't make use of queues nor collections caching nor has any kind of circuit breaker implemented. This makes its use risky in a highly active GS instance.

### Add support for temporary posts

This will allow support for "stories" and empower whole instances (and/or single users) to have temporary posts.

### Review third party developer interfaces

There are various bots in the fediverse and we feel it might be about time to set them apart from humans so that we know who to kill when the robotic uprising comes, so to speak (ahem).

Ultimately, bots aren't humans and, therefore, they shouldn't have accounts claiming that they are "Persons".

So some good measures for making change are:

* Introduce **OStatus** 2 in GNU social for authentication of clients that aren't browsers;
* Review current APIs for **Applications** that act in the User&rsquo;s behalf and introduce a user platform for the management of those;
* Review current APIs for **Bots** that act in their own behalf and introduce a developer platform for the management of those.

Technical sidenote for those who have read the ActivityPub standard: GS Bots are represented as Actors with the [Application](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-application) type, while GS Applications are an internal (not federated) thing that allow Actors with the [Person](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-person) type (a.k.a.: Users) to use third party applications to control and do stuff with their account.

### "We have you noticed we've straighten every dent up"
Props to [XRevan86](https://loadaverage.org/XRevan86) for that pun! (Notices in GNU social are colloquially referred to as Dents).

GNU social wants to get polished with a <span id="todo-themes">modern looking default theme</span>. For this, it would be interesting to come up with some themes guidelines so, if you're into web design, this might be *the task* for you! :)

On the other hand, if you are more into backend development, we've got you covered. Some new and interesting concepts in the world of Software Engineering were introduced and we are naturally looking forward to include them and refresh the current code base for the release of GNU social 2 with them!

## How to apply?
First read [GNU's guidelines](https://www.gnu.org/software/soc-projects/guidelines.html) on how to prepare a good proposal.

Then please contact Diogo Cordeiro (*up201705417*) on GS's [IRC channel (#social@irc.freenode.net)](irc://irc.freenode.net:6697/social) to get started on your proposal. Ah, and be sure to create your student account on Google Summer of Code asap.

<a href="https://summerofcode.withgoogle.com/" class="BigButton">**GO!**</a>
